// ***Ts的基本类型***

// 布尔类型
let married: boolean = true;


// number类型
let age: number = 10;


// 字符串类型

let first_name: string = 'madeFuture'


// 数组类型-两种写法均可
let arr1: number[] = [1, 2, 3]
let arr2: Array<number> = [4, 5, 6]
let arr3: string[] = ['1', '2', '3'] //string是指定数组中元素的基本类型

// 元组类型(tuple) 数量和类型都有明确规定的数组
let zhufeng: [string, number] = ['chengyuan', 27]


// // 枚举类型- 可以确定的量，类似于下拉框(性别，赤橙红绿青蓝紫 等)
// 枚举类型- 普通枚举
enum Gender {
    GIRL,
    BOY
}
console.log(Gender.BOY); //1
console.log(Gender['BOY']); //1
console.log(Gender[1]); //BOY

// 枚举类型- 常量枚举 
const enum Colors {
    RED, YELLOW, BLUE
}
let myColor = [Colors.RED, Colors.YELLOW]



// 任意类型-any-一般适用于 类型转换困难，数据类型比较复杂时

// ***如果变量定义为any类型，就跟js差不多，不进行类型检查
let root: any = document.getElementById('app')
root.style.color = 'red'

// 正常的html元素类型声明(内置类型)
let element: HTMLElement | null = document.getElementById('root')


// null/undefined类型-其他基本类型的子类型，可以赋值给任何类型
// 此处原生配置会报错,需要将 tsconfig.json中的    "strictNullChecks": false,            /* Enable strict null checks. */
// let x: number;
// x = 1;
// x = undefined;
// x = null;


// ******或者使用联合类型声明来解决问题******
let y: number | null | undefined;
y = 1;
y = undefined;
y = null;